﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HotelSoft.HotelManagement_DTO;
using System.Collections;
using System.Data;

namespace HotelSoft.HotelManagement_DAO
{
    public class NhanVienDAO : AbstractDAO
    {
        public static DataTable SelectAll()
        {
            string sql = "SELECT * FROM NHANVIEN";
            return Config.AccessHelper.ExecuteQuery(sql);
        }
        public override bool Them(object AbstractDTO)
        {
            try
            {
                NhanVienDTO dto = (NhanVienDTO)AbstractDTO;
                string insertCommand = "INSERT INTO NHANVIEN VALUES('" +
                   dto.MASONV + "', N'" +
                   dto.HOTENNV + "', N'" +
                   dto.GIOITINH + "', '" +
                   DateTime.Parse(dto.NGAYSINH).ToString("MM/dd/yyyy") + "', N'" +
                   dto.DIACHINV + "', '" +
                   dto.SDTNV + "', '" +
                   DateTime.Parse(dto.NGAYVL).ToString("MM/dd/yyyy") + "', '" +
                   dto.MUCLUONG + "', N'" +
                   dto.CHUCVU + "', N'" +
                   dto.TENKS + "')";
                Config.AccessHelper.ExecuteQuery(insertCommand);
                return true;
            }
            catch
            {
                return false;
            }
        }


        public override bool CapNhatThongTin(object AbstractDTO)
        {
            try
            {
                NhanVienDTO dto = (NhanVienDTO)AbstractDTO;
                string updateCommand = "UPDATE NHANVIEN SET HoTenNV = N'" + dto.HOTENNV +
                    "', GioiTinh = N'" + dto.GIOITINH + "', NgaySinh = '" + DateTime.Parse(dto.NGAYSINH).ToString("MM/dd/yyyy") + "', DiaChiNV = N'" +
                    dto.DIACHINV + "', SDTNV = '" + dto.SDTNV + "' ,NgayVL = '" + DateTime.Parse(dto.NGAYVL).ToString("MM/dd/yyyy") +
                    "', MucLuong = " + dto.MUCLUONG + " , ChucVu = N'" + dto.CHUCVU + "' WHERE MasoNV = '" +
                    dto.MASONV + "'";
                Config.AccessHelper.ExecuteQuery(updateCommand);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public override void TraCuu(object AbstractDTO)
        {
            NhanVienDTO dto = (NhanVienDTO)AbstractDTO;
            string searchCommand = "Select*from NHANVIEN WHERE";
            string sTest = "Select*from NHANVIEN WHERE";//Dung de kiem tra cac dieu kien truy van
            if (dto.HOTENNV != null)
            {
                searchCommand += " HoTenNV = '" + dto.HOTENNV + "'";
            }
            if (dto.DIACHINV != null)
            {
                if (searchCommand == sTest)
                    searchCommand += " DiaChiNV = '" + dto.DIACHINV + "'";
                else
                    searchCommand += ", DiaChiNV = '" + dto.DIACHINV + "'";
            }
            if (dto.CHUCVU != null)
                if (searchCommand == sTest)
                    searchCommand += " ChucVu = '" + dto.CHUCVU + "'";
                else
                    searchCommand += ", ChucVu = '" + dto.CHUCVU + "'";

            if (dto.NGAYVL != null)
            {
                if (searchCommand == sTest)
                    searchCommand += " NgayVL = '" + dto.NGAYVL + "'";
                else
                    searchCommand += ", NgayVL = '" + dto.NGAYVL + "'";
            }
            if (dto.NGAYSINH != null)
            {
                if (searchCommand == sTest)
                    searchCommand += " NgaySinh = '" + dto.NGAYSINH + "'";
                else
                    searchCommand += ", NgaySinh = '" + dto.NGAYSINH + "'";
            }
            if (searchCommand == sTest)
                searchCommand = "Select*from NHANVIEN";
            Config.AccessHelper.ExecuteQuery(searchCommand);
        }

        public override void Xoa(object AbstractDTO)
        {
            NhanVienDTO dto = (NhanVienDTO)AbstractDTO;
            string deleteCommand = "DELETE FROM NHANVIEN WHERE MasoNV = '" + dto.MASONV + "'";
            Config.AccessHelper.ExecuteNonQuery(deleteCommand);
        }


        internal void Xoa(ArrayList dsNhanVien)
        {
            foreach (NhanVienDTO nhanvien in dsNhanVien)
            {
                Xoa(nhanvien);
            }
        }

        public bool SoSanhChuoi(String a, String b)
        {
            String a1 = a.ToLower();
            String b1 = b.ToLower();
            a1 = a1.Trim();
            b1 = b1.Trim();
            if (a1.Contains(b1))
                return true;
            return false;
        }
        public bool SoSanhNhanVien(NhanVienDTO dtoNhanVien1, NhanVienDTO dtoNhanVien2)
        {
            bool flag = false;

            if (dtoNhanVien2.MASONV != null)
                if (dtoNhanVien1.MASONV.ToUpper() == dtoNhanVien2.MASONV.ToUpper())
                    flag = true;
                else
                    return false;
            if (dtoNhanVien2.HOTENNV != null)
                if (SoSanhChuoi(dtoNhanVien1.HOTENNV.ToString(), dtoNhanVien2.HOTENNV.ToString()) == true)
                    flag = true;
                else
                {
                    return false;
                }
            if (dtoNhanVien2.NGAYSINH != null)
                if (SoSanhChuoi(dtoNhanVien1.NGAYSINH, dtoNhanVien2.NGAYSINH) == true)
                    flag = true;
                else
                    return false;
            if (dtoNhanVien2.CHUCVU != null)
                if (dtoNhanVien1.CHUCVU.ToUpper()== dtoNhanVien2.CHUCVU.ToUpper())
                    flag = true;
                else
                    return false;

            if (dtoNhanVien2.DIACHINV != null)
                if (SoSanhChuoi(dtoNhanVien1.DIACHINV, dtoNhanVien2.DIACHINV) == true)
                    flag = true;
                else
                    return false;

            if (dtoNhanVien2.SDTNV != null)
                if (dtoNhanVien1.SDTNV.ToUpper()==dtoNhanVien2.SDTNV.ToUpper())
                    flag = true;
                else
                    return false;

            if (dtoNhanVien2.NGAYVL != null)
                if (SoSanhChuoi(dtoNhanVien1.NGAYVL, dtoNhanVien2.NGAYVL) == true)
                    flag = true;
                else
                    return false;

            if (dtoNhanVien2.GIOITINH != null)
                if (SoSanhChuoi(dtoNhanVien1.GIOITINH.ToString(), dtoNhanVien2.GIOITINH.ToString()) == true)
                    flag = true;
                else
                    return false;


            if (dtoNhanVien2.MUCLUONG != 0)
                if (dtoNhanVien1.MUCLUONG.ToString()== dtoNhanVien2.MUCLUONG.ToString())
                    flag = true;
                else
                    return false;
            return flag;
        }

        public ArrayList TraCuuNhanVien(ArrayList dsNhanVien, NhanVienDTO dtoNhanVienCanTraCuu)
        {
            ArrayList dsKetQuaTraCuu = new ArrayList();
            for (int i = 0; i < dsNhanVien.Count; i++)
            {
                if (SoSanhNhanVien(((NhanVienDTO)dsNhanVien[i]), dtoNhanVienCanTraCuu) == true)
                    dsKetQuaTraCuu.Add(((NhanVienDTO)dsNhanVien[i]));
            }
            return dsKetQuaTraCuu;
        }

        public ArrayList LayDanhSachNhanVien()
        {
            ArrayList arrDanhSach = new ArrayList();
            string searchCommand = "Select*from NHANVIEN";
            DataTable ds = Config.AccessHelper.ExecuteQuery(searchCommand);
            NhanVienDTO nhanvien;
            int i = 0;
            int iSoDong = ds.Rows.Count;
            int iSoCot = ds.Columns.Count;
            while (i < iSoDong)
            {
                nhanvien = new NhanVienDTO();
                //nhanvien.MASO = int.Parse(ds.Rows[i]["MasoNV"].ToString());
                nhanvien.MASONV = ds.Rows[i]["MasoNV"].ToString();
                nhanvien.HOTENNV = ds.Rows[i]["HoTenNV"].ToString();
                nhanvien.GIOITINH = ds.Rows[i]["GioiTinh"].ToString();
                //nhanvien.NGAYSINH = DateTime.Parse(ds.Rows[i]["NgaySinh"].ToString());
                nhanvien.NGAYSINH = ds.Rows[i]["NgaySinh"].ToString();
                nhanvien.DIACHINV = ds.Rows[i]["DiaChiNV"].ToString();
                nhanvien.SDTNV = ds.Rows[i]["SDTNV"].ToString();
                //nhanvien.NGAYVL = DateTime.Parse(ds.Rows[i]["NgayVL"].ToString());
                nhanvien.NGAYVL = ds.Rows[i]["NgayVL"].ToString();
                nhanvien.MUCLUONG = float.Parse(ds.Rows[i]["MucLuong"].ToString());

                nhanvien.CHUCVU = ds.Rows[i]["ChucVu"].ToString();

                nhanvien.TENKS = ds.Rows[i]["TenKS"].ToString();
                arrDanhSach.Add(nhanvien);
                i++;
            }
            return arrDanhSach;
        }
        public int LayMaSoPhongCuoiCung()
        {
            string sCommand = "SELECT*FROM NHANVIEN WHERE MasoNV >= (SELECT max(MasoNV) from NHANVIEN)";
            //AccessDB obj = new AccessDB("DBKhachSan.mdb");
            // DataTable kq = obj.search(sCommand);
            DataTable kq = Config.AccessHelper.ExecuteQuery(sCommand);
            return int.Parse(kq.Rows[0][0].ToString());
        }

        public DataTable dataTablegetListNhanVien(string ma)
        {
            string sql = "Select MasoNV, HoTenNV,GioiTinh, NgaySinh, DiaChiNV,SDTNV,NgayVL,MucLuong,ChucVu from NhanVien where ChucVu=N'" + ma + "'";
            return Config.AccessHelper.ExecuteQuery(sql);
        }
        public static List<NhanVienDTO> LayDSNhanVien()
        {
            List<NhanVienDTO> arrDanhSach = new List<NhanVienDTO>();
            string searchCommand = "Select*from NHANVIEN";
            DataTable ds = Config.AccessHelper.ExecuteQuery(searchCommand);
            NhanVienDTO nhanvien;
            int i = 0;
            int iSoDong = ds.Rows.Count;
            int iSoCot = ds.Columns.Count;
            while (i < iSoDong)
            {
                
                nhanvien = new NhanVienDTO();              
                nhanvien.MASONV = ds.Rows[i]["MasoNV"].ToString();
                nhanvien.HOTENNV = ds.Rows[i]["HoTenNV"].ToString();
                nhanvien.GIOITINH = ds.Rows[i]["GioiTinh"].ToString();
                nhanvien.NGAYSINH = ds.Rows[i]["NgaySinh"].ToString();
                nhanvien.DIACHINV = ds.Rows[i]["DiaChiNV"].ToString();
                nhanvien.SDTNV = ds.Rows[i]["SDTNV"].ToString();
                nhanvien.NGAYVL = ds.Rows[i]["NgayVL"].ToString();
                nhanvien.MUCLUONG = float.Parse(ds.Rows[i]["MucLuong"].ToString());
                nhanvien.CHUCVU = ds.Rows[i]["ChucVu"].ToString();
                nhanvien.TENKS = ds.Rows[i]["TenKS"].ToString();

                arrDanhSach.Add(nhanvien);
                i++;
            }
            return arrDanhSach;
        }

        public bool KTMA(object AbstractDTO)
        {
            NhanVienDTO dto = (NhanVienDTO)AbstractDTO;
            string strSQL;
            strSQL = "Select Count(*) From NHANVIEN where MasoNV='" + dto.MASONV+ "'";
            return Config.AccessHelper.ExecuteScalar(strSQL);
        }
    }
}
